<article id="wikiArticle">
<p>本节将介绍并讨论 JavaScript 的基本概念。</p>
<h2 id="What_is_JavaScript.3F" name="What_is_JavaScript.3F">什么是 JavaScript？</h2>
<p>JavaScript 是一种跨平台，面向对象的脚本语言。作为一种小巧且轻量级的语言，JavaScript 无意于独立运行，而是被设计为可以轻易嵌入到其它的产品和应用中，比如 Web 浏览器。在宿主环境中，JavaScript 可以被连接到环境中的对象之上，以提供对其的编程控制。</p>
<p>核心的 JavaScript 中包含有一组核心的对象，包括 <code>Array，</code><code>Date</code> 和 <code>Math</code>，以及一组核心的语言要素，包括操作符，控制结构和语句。出于多种目的，可以通过为其增补附加的对象，对核心 JavaScript 加以扩展；例如：</p>
<ul>
<li><em>客户端 JavaScript</em> 提供了用于控制浏览器（Navigator 或者其它浏览器）以及其中的文档对象模型（DOM）的对象，从而扩展了核心 JavaScript。例如，客户端扩展允许应用程序在 HTML 的表单中加入元素，以便响应用户事件，比如鼠标点击，表单输入和页面导航。</li>
<li><em>服务器端 JavaScript</em> 提供了服务于在服务器上运行 JavaScript 的对象，从而扩展了核心 JavaScript。例如，服务器端扩展可以允许应用程序访问关系型数据库，在应用程序的不同调用间提供信息的连续性，甚至于处理服务器之上的文件。</li>
</ul>
<p>借由 JavaScript 的 LiveConnect 功能，您可以让 Java 和 JavaScript 间实现通讯。从 JavaScript 中，您可以创建 Java 对象并访问它们的公共方法和域。从 Java 中，也可以访问 JavaScript 的对象，属性和方法。</p>
<p>Netscape 发明了 JavaScript 并将 JavaScript 首先用于 Netscape 浏览器中。</p>
<h2 id="JavaScript_and_Java" name="JavaScript_and_Java">JavaScript 和 Java</h2>
<p>JavaScript 和 Java 虽然在某些方面相似，但在另外一些方面确有着本质的不同。JavaScript 语言类似于 Java 语言，但是没有 Java 的类型静态化和强类型检查。JavaScript 大部分的表达式语法，命名规范以及基本的控制流构成都和 Java 相同。正是由于这个原因，JavaScript 才从 LiveScript 改名得来。</p>
<p>不同于 Java 的通过声明而形成的编译时的类系统，JavaScript 支持基于少量数据类型的运行时系统，这些数据类型用以表示数值、布尔值和字符串。JavaScript 使用基于原型的对象模型，而不是更常见的基于类的对象模型。基于原型的对象模型提供了动态的继承能力，实际上，究竟什么得到继承，对于每个对象都可能不同。JavaScript 还支持无需任何特殊的声明要求的函数。函数可以作为对象的属性，当成松散类型方法（loosely typed method）来执行。</p>
<p>相比 Java 而言，JavaScript 是一种格式相当自由的语言。无需声明所有的变量，类和方法。无需关心方法是公共的，私有的或者是保护的，也无需实现接口。变量，参数，以及返回值都无需显式的类型声明。</p>
<p>Java 是基于类的编程语言，目标在于快速的执行和类型安全。这里的类型安全，可以是比如，你不能将 Java 的整数强制转换为对象引用，或者通过篡改 Java 字节码来达到访问私有内存区域的目的。Java 基于类的模型意味着程序完全由类及其方法构成。这些类的继承以及强类型通常需要紧密耦合的对象层级结构。这些需求使得 Java 编程远比 JavaScript 编程要复杂。</p>
<p>相比之下，JavaScript 的设计理念源于一系列更小巧的动态类型语言，比如 HyperTalk 和 dBASE。这些脚本语言以其更为简单的语法，更专业化的内建功能，以及最小化的对象创建需求，提供了更为大众化的编程工具。</p>
<table class="standard-table">
<caption>表 1.1 JavaScript 与 Java 的对比</caption>
<thead>
<tr>
<th scope="col">JavaScript</th>
<th scope="col">Java</th>
</tr>
</thead>
<tbody>
<tr>
<td>面向对象的。对象的类型间没有区别。继承是基于原型机制实现的，且属性和方法可以动态地添加到任何对象之上。</td>
<td>基于类的。对象被划分为类和实例，且所有的继承是通过类的层级结构实现的。类或者实例不能动态地添加属性或方法。</td>
</tr>
<tr>
<td>变量的数据类型无需声明（动态化类型）。</td>
<td>变量的数据类型必需声明（静态化类型）。</td>
</tr>
<tr>
<td>不能自动地写入硬盘</td>
<td>不能自动地写入硬盘</td>
</tr>
</tbody>
</table>
<p>有关 JavaScript 和 Java 之间区别的更多信息，参见 <a href="/zh-CN/docs/JavaScript/Guide/Details_of_the_Object_Model" title="JavaScript/Guide/Details of the Object Model">对象模型的细节</a>。</p>
<h2 id="JavaScript_and_the_ECMAScript_Specification" name="JavaScript_and_the_ECMAScript_Specification">JavaScript 和 ECMAScript 规范</h2>
<p>Netscape 发明了 JavaScript 并将 JavaScript 首先用于 Netscape 浏览器中。不过， Netscape 正在与 <a class="external" href="http://www.ecma-international.org/" rel="noopener">Ecma International</a> — 欧洲信息和通讯标准化协会（ECMA 曾是 European Computer Manufacturers Association，既欧洲计算机制造商协会的缩写）一道致力于交付一个基于核心 JavaScript 的，标准化的，国际化的编程语言，既 ECMAScript。ECMAScript 在所有支持该标准的应用程序中具有相同的特性。其它公司可以使用开放的标准语言来开发它们的 JavaScript 实现。ECMAScript 标准在 ECMA-262 规范中加以记述。</p>
<p>ECMA-262 标准由 <a class="external" href="http://www.iso.ch/" rel="noopener">ISO</a>（International Organization for Standardization，既国际化标准化组织）批准为 ISO-16262。在 Mozilla 网站上可以找到 <a class="external" href="http://www-archive.mozilla.org/js/language/E262-3.pdf" rel="noopener" title="http://www-archive.mozilla.org/js/language/E262-3.pdf">PDF 版本的 ECMA-262</a> （过时的版本）。在 <a class="external" href="http://www.ecma-international.org/publications/standards/Ecma-262.htm" rel="noopener">Ecma International 的网站</a> 上也可以找到该规范。ECMAScript 规范没有描述文档对象模型（DOM）。该模型由 <a class="external" href="http://www.w3.org/" rel="noopener">World Wide Web Consortium (W3C)</a> 完成标准化。DOM 定义了 HTML 文档对象呈现在脚本中的方式。</p>
<h3 id="Relationship_between_JavaScript_Versions_and_ECMAScript_Editions" name="Relationship_between_JavaScript_Versions_and_ECMAScript_Editions">JavaScript 版本和 ECMAScript 版本之间的关系</h3>
<p>Netscape 与 Ecma International 的紧密合作形成了 ECMAScript 规范（ECMA-262）。下面的表格描述了 JavaScript 版本和 ECMAScript 版本之间的关系。</p>
<table class="standard-table">
<caption>表 1.2 JavaScript 版本和 ECMAScript 版本</caption>
<thead>
<tr>
<th scope="row">JavaScript 版本</th>
<th scope="col">与 ECMAScript 版本的关系</th>
</tr>
</thead>
<tbody>
<tr>
<td>JavaScript 1.1</td>
<td>ECMA-262，第 1 版 基于 JavaScript 1.1.</td>
</tr>
<tr>
<td>JavaScript 1.2</td>
<td>ECMA-262 在 JavaScript 1.2 发布时尚未完成。由于以下原因，JavaScript 1.2 并不与 ECMA-262，第 1 版完全兼容：
    <ul>
<li>Netscape 在 JavaScript 1.2 开发了一些新的特性尚未被 ECMA-262 采纳。</li>
<li>ECMA-262 添加了两项新特性：基于 Unicode 的国际化，以及跨平台的一致行为。而 JavaScript 1.2 的某些特性，例如 <code>Date</code> 对象，是依赖于平台的，且具有特定于平台的行为。</li>
</ul>
</td>
</tr>
<tr>
<td>JavaScript 1.3</td>
<td>JavaScript 1.3 完全兼容于 ECMA-262，第 1 版。<br/>
    JavaScript 1.3 解决了 JavaScript 1.2 与 ECMA-262 之间的不一致性，同时保留了 JavaScript 1.2 中的附加特性，除了  <code>==</code> 和 <code>!= 被修改以便顺应于</code> ECMA-262 之外。</td>
</tr>
<tr>
<td>JavaScript 1.4</td>
<td>JavaScript 1.4 完全兼容于 ECMA-262，第 1 版。<br/>
    ECMAScript 规范的第三版在 JavaScript 1.4 发布时尚未最终完成。</td>
</tr>
<tr>
<td>JavaScript 1.5</td>
<td>JavaScript 1.5 完全兼容于 ECMA-262，第 3 版。</td>
</tr>
</tbody>
</table>
<div class="note"><strong>注：</strong>ECMA-262，第 2 版仅包含对第 1 版规范的细微的编辑性的改动和错误修正。由 Ecma International 的 TC39 工作组发布的最新版本为 ECMAScript 版本 5.1</div>
<p><a href="/en-US/docs/JavaScript/Reference" title="JavaScript/Reference">JavaScript 参考</a> 中标明了语言中的哪些特性兼容于 ECMAScript。</p>
<p>JavaScript 将总会包含某些 ECMAScript 规范中所没有的特性；JavaScript 兼容于 ECMAScript，同时提供附加特性。</p>
<h3 id="JavaScript_Documentation_versus_the_ECMAScript_Specification" name="JavaScript_Documentation_versus_the_ECMAScript_Specification">JavaScript 文档相较于 ECMAScript 规范</h3>
<p>ECMAScript 规范了实现 ECMAScript 的一组需求；它有助于您确定某项 JavaScript 特性是否也为其它 ECMAScript 的实现所支持。如果您想编写仅仅使用 ECMAScript 所支持的特性的代码，那么您可能需要参考 ECMAScript 规范。</p>
<p>ECMAScript 文档的目的不在于帮助脚本程序员；关于脚本编写的信息，请参考 JavaScript 文档。</p>
<h3 id="JavaScript_and_ECMAScript_Terminology" name="JavaScript_and_ECMAScript_Terminology">JavaScript 和 ECMAScript 术语</h3>
<p>ECMAScript 规范使用的术语和语法对于 JavaScript 程序员而言，可能会有点陌生。尽管对语言的描述方式在 ECMAScript 中可能不尽相同，但是语言本身还是相同的。JavaScript 支持 ECMAScript 规范中所勾勒出的全部功能。</p>
<p>JavaScript 文档描述了语言中适合于 JavaScript 程序员的方面。例如：</p>
<ul>
<li>JavaScript 文档中没有描述全局对象，因为不会直接用到它。全局对象的属性和方法在 JavaScript 文档中被称为顶层函数和属性。</li>
<li>JavaScript 文档中没有讨论 <code>Number</code> 和 <code>String</code> 对象的无参（零个参数）构造器，因为几乎不会用到其生成的对象。无参的 <code>Number</code> 构造器返回 +0，而无参的 <code>String</code> 构造器返回 "" （空的字符串）。</li>
</ul>
<div><div class="prevnext" style="text-align: right;">
<p><a href="/zh-CN/docs/JavaScript/Guide/About" style="float: left;">« 上一页</a><a href="/zh-CN/docs/JavaScript/Guide/Values,_variables,_and_literals">下一页  »</a></p>
</div></div>
</article>